<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
	    /**
	     *主题:slice()方法
	     *描述:
	     *	  语法: Array slice(start,end)
	     *		返回一个新的数组，包含从start到end(不包括该元素)的Array的元素
	     *
	     *
	     *主题: instanceof 一元运算符
	     *描述:用于判断一个变量是否某个对象的实例(也会在原型链上找)
	     *
	     *主题: bool isPrototypeOf()、bool hasOwnProperty () 
	     *描述:
	     *		isPrototypeOf:判断指定对象object1是否存在于另一个对象object2的原型链中，是则返回true，否则返回false
	     *
	     *		hasOwnProperty:如果该属性或者方法是该 对象自身定义的而不是器原型链中定义的 则返回true;否则返回false
	     *
	     *
	     *
	     *
	     */




    	function Sandbox()
    	{
    		var args = Array.prototype.slice.call(arugments),
    			callBack = args.pop(),
    			//模块可以作为一个数组传递,或作为单独的参数传递
    			moduels = (args[0] && typeof args[0]==="string") ? args : args[0],
    			i;
    		//确保该函数作为构造函数调用
    		if(!(this instanceof Sandbox))
    		{
    			return new Sandbox(moduels,callBack);
    		}

    		//需要向`this`添加的属性
    		this.a = 1;
    		this.b = 2;

    		//现在向该和兴`this`对象添加模块
    		//不指定模块名称或指定"*"都表示 “使用所有模块”
    		if(!moduels || moduels === "*")
    		{
    			moduels = [];
    			for(i in Sandbox.moduels)
    			{
    				if(Sandbox.moduels.hasOwnProperty(i))
    				{
    					moduels.push(i);
    				}
    			}
    		}
    		//初始化所需的模块
    		for(i=0; i< moduels.length;i+=1)
    		{
    			Sandbox.moduels[moduels[i]](this);
    		}
    		callBack(this);
    	}

    	//需要的任何原型属性
    	Sandbox.prototype = {
    		name:"My application",
    		version:"1.0",
    		getName: function(){
    			return this.name;
    		}
    	};


    	//扩展模块


    	Sandbox.moduels = {};
    	Sandbox.moduels.dome = function(box){
    		box.getElement = function(){};
    		box.getStyle = function(){};
    		box.foo = "bar";
    	};
    	Sandbox.moduels.event = function(box){
    		box.attachEvent = function(){};
    		box.dettachEvent = function(){};
    	}
    	Sandbox.moduels.ajax = function(){
    		box.makeRequest = function(){};
    		box.getResponse = function(){};
    	};


    	/**
    	  *
    	  *
    	  *
    	  *
    	  *
    	  *
    	  *
    	  *
    	  */


    </script>
</head>
<body>

</body>
</html>
